<html>

	<head>
		<title>5.12.6 高级用法</title>
		<meta charset="utf-8" />
		<meta name="author" content="jfinal,yaolin" />
		<meta name="Keywords" content="" />
		<link rel="stylesheet" type="text/css" href="../../css/global.css" />
	</head>

	<body>
		<h1>5.12.6 高级用法</h1>
		<p>除了#sql、 #para、 #namespace 之外，还可以使用 JFinal Template Engine 中所有存在的指令， 生成复杂条件的 sql 语句，以下是相对灵活的示例：</p>
		<img src="../../images/ativeRecord/5.12.6.1.png" />
		<p>以上代码#for 指令对 <span class="red">Map 类型的 cond 参数</span>进行迭代， 动态生成自由的查询条件。 上图中 的三元表达式表示在
			<span class="red">第一次迭代时生成 where，后续则生成 and</span>。 #(x.key) 输出参数 key 值， #para(x.value)输出一个问号占位符，以及将参数 value 值输出到 SqlPara.paraList 中去。</p>
		<p>以上 sql 模板所对应的 java 代码如下：</p>
		<img src="../../images/ativeRecord/5.12.6.2.png" />
		<p>以上三个红色框中是 JFinal 独创的<span class="red">参数带有比较运算符</span>的用法，可以同时生成 sql 查询条 件名称、 条件运算符号、 参数列表， 一石三鸟。 甚至可以将此法用于 and or not 再搭配一个 OrderedHashMap 生成更加灵活的逻辑组合条件 sql。</p>
		<p>更加好玩的用法，可以用 jfinal 模板引擎的#define 指令将常用的 sql 定义成通用的模板函 数，以便消除重复性 sql 代码，下面是利用 id 数组删除数据的示例：</p>
		<img src="../../images/ativeRecord/5.12.6.3.png" />
		<p>如上 sql 模板先是用 template engine 所提供的#define 指令定义模板函数 deleteByIdList，然 后下方的#sql 指令中对其调用，可以避免重复代码，在 java 中可使用如下代码来生成 sql：</p>
		<img src="../../images/ativeRecord/5.12.6.4.png" />
		<p>注意上面例子中的 Kv 是 JFinal 提供的用户体验更好的 Map 实现，使用任意的 Map 都可 以，不限定为 Kv。总之， 利用 sql 模块专用的三个指令再结合模板引擎已有指令自由组合， 可非常简洁地实现极为强大的 sql 管理功能。</p>
		<p><span class="red">特别注意：</span> sql 管理模块使用的模板引擎<span class="red">并非在 configEngine(Engine me)配置</span>，因此在配 置 shared method、 directive 等扩展时需要使用 activeRecordPlugin.getEngine()，然后对该 Engine 对象进行配置。
		</p>
	</body>

</html>